在 IEnumerable 上查找最后一个

发布于 2024-07-11 07:01:08 字数 127 浏览 11 评论 0原文

我想在实现 IEnumerable 的集合上调用 FindLast,但 FindLast 仅适用于 List。 最好的解决方案是什么?

I would like to call FindLast on a collection which implements IEnumerable, but FindLast is only available for List. What is the best solution?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

数理化全能战士 2024-07-18 07:01:08

相当于:(

var last = list.FindLast(predicate);

后者

var last = sequence.Where(predicate).LastOrDefault();

必须检查序列中的所有项,但是...)

实际上,“Where()”是查找部分,而“Last()”是分别是“FindLast”的最后部分。 同样,FindFirst(predicate) 将映射到 sequence.Where(predicate).FirstOrDefault(),而 FindAll(predicate) 将是 sequence.Where(谓词)

The equivalent to:

var last = list.FindLast(predicate);

is

var last = sequence.Where(predicate).LastOrDefault();

(The latter will have to check all items in the sequence, however...)

Effectively the "Where()" is the Find part, and the "Last()" is the Last part of "FindLast" respectively. Similarly, FindFirst(predicate) would be map to sequence.Where(predicate).FirstOrDefault() and FindAll(predicate) would be sequence.Where(predicate).

一场信仰旅途 2024-07-18 07:01:08

使用 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;
    }
}

How about with LINQ-to-Objects:

var item = data.LastOrDefault(x=>x.Whatever == "abc"); // etc

If you only have C# 2, you can use a utility method instead:

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;
    }
}
诗笺 2024-07-18 07:01:08

您可以通过将集合传递给 List<> 将其添加到新列表中 构造函数。

List<MyClass> myList = new List<MyClass>(MyCol);
myList.FindLast....

you can add you collection to a new List by passing it to List<> constructor.

List<MyClass> myList = new List<MyClass>(MyCol);
myList.FindLast....
离不开的别离 2024-07-18 07:01:08

使用扩展方法 Last()
它位于命名空间 System.Linq 中。

Use the extension method Last()
which is located in the namespace System.Linq.

嗫嚅 2024-07-18 07:01:08

您的问题无效,因为集合没有最后一个元素。 具有完整排序的更专业的集合是列表。 字典是一种更专业、没有顺序的集合。

Your question is invalid because a collection has no last element. A more specialized collection that does have a complete ordering is a list. A more specialized collection that does not have an ordering is a dictionary.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文