6

FindLastを実装するコレクションを呼び出したいのですIEnumerableが、FindLastでしか利用できませんList。最善の解決策は何ですか?

4

5 に答える 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 に答える