FindLast
を実装するコレクションを呼び出したいのですIEnumerable
が、FindLast
でしか利用できませんList
。最善の解決策は何ですか?
7019 次
5 に答える
9
同等のもの:
var last = list.FindLast(predicate);
は
var last = sequence.Where(predicate).LastOrDefault();
(ただし、後者はシーケンス内のすべての項目をチェックする必要があります...)
事実上、「Where()」は検索部分であり、「Last()」はそれぞれ「FindLast」の最後の部分です。同様に、FindFirst(predicate)
はにマップされsequence.Where(predicate).FirstOrDefault()
、FindAll(predicate)
になりますsequence.Where(predicate)
。
于 2009-01-12T15:41:34.040 に答える
4
LINQ-to-Objects ではどうですか:
var item = data.LastOrDefault(x=>x.Whatever == "abc"); // etc
C# 2 しかない場合は、代わりにユーティリティ メソッドを使用できます。
using System;
using System.Collections.Generic;
static class Program {
static void Main() {
int[] data = { 1, 2, 3, 4, 5, 6 };
int lastOdd = SequenceUtil.Last<int>(
data, delegate(int i) { return (i % 2) == 1; });
}
}
static class SequenceUtil {
public static T Last<T>(IEnumerable<T> data, Predicate<T> predicate) {
T last = default(T);
foreach (T item in data) {
if (predicate(item)) last = item;
}
return last;
}
}
于 2009-01-12T15:46:37.990 に答える
1
コレクションを List<> コンストラクターに渡すことで、コレクションを新しいリストに追加できます。
List<MyClass> myList = new List<MyClass>(MyCol);
myList.FindLast....
于 2009-01-12T15:30:07.383 に答える
0
コレクションに最後の要素がないため、質問は無効です。完全な順序を持っているより専門的なコレクションはリストです。順序付けのない、より専門的なコレクションは辞書です。
于 2009-01-12T17:48:23.580 に答える
0
名前空間 System.Linq にある拡張メソッド Last() を使用します。
于 2009-01-12T15:29:08.900 に答える