对列表中的每个项目以及列表中的每个其他项目执行操作

加雷斯·黑斯廷斯

我有一个没有重复的数据列表。对于这个例子,我会说我的清单是

List<string> list1 = new List<string>() { "A", "B", "C", "D" };

我想对列表中的每个项目执行操作,而不对列表中的其他每个项目执行操作,除非我已经对它们执行了操作(AB和BA)或它们是否相同(AA)。

例如。

A against B
A against C
A against D
B against C
B against D
C against D

现在这很简单,但是我的清单很大,而且此过程可能很耗时。还有我有的数据,我不需要对匹配的数据运行该操作,或者如果该操作已经运行

例如。

A against A - Skip
A against B - Good
A against C - Good
A against D - Good
B against A - Skip (we already did A against B)
B against B - Skip
B against C - Good
B against D - Good
C against A - Skip

等等。

我一直在寻找(而且我什至不知道它是否存在)的简单方法,可以用来执行此操作,而不是触发两个循环并执行操作并保存结果以供以后比较。

遍历列表是一个问题,O(n*n)但是由于我不需要比较一半以上的结果,所以浪费时间,因为我知道我只需要检查一下O(n*(n/2))

我当前使用的代码如下

List<string> list1 = new List<string>() { "A", "B", "C", "D" };
List<string> list2 = new List<string>(list1);
List<string> listResult = new List<string>();

list2.Reverse();

int i = 0;
foreach (var a in list1)
{
    for (int j = 0; j < (list2.Count / 2); j++)
    {
        i++;
        Console.WriteLine("Looped {0} times", i);

        // Don't run against ourself
        if (a == list2[j])
            continue;

        if (listResult.Count(x => (x == a + list2[j]) || (x == list2[j] + a)) == 0)
        {
            listResult.Add(a + list2[j]);

            // Perform some operation here
            // operation(a, list2[j]);
        }
    }
}

上面的代码工作正常(我需要调整list2.Count / 2部分以解决奇数列表)。

有一个更好的方法吗?我错过了LINQ扩展方法吗?我的问题是我真的不知道该怎么做。

我想知道是否有一种方法可以返回仅包含我想要的项目的列表,然后循环浏览并执行操作。也许使用.SelectMany()

克里斯

对于列表中的每个条目,将其与列表中紧随其后的所有条目进行匹配,因为之前的项目已经被匹配。

List<string> list1 = new List<string>() { "A", "B", "C", "D" };

for( int i = 0; i < list1.Count - 1; i++ )
    for( int j = i + 1; j < list1.Count; j++ )
        Console.WriteLine( "{0} against {1}", list1[i], list1[j] );

编辑:至于第二个问题,这样的事情怎么样:

public static class Extensions
{
    public static IEnumerable<U> Combinations<T, U>( this IEnumerable<T> list,
                                                     Func<T, T, U> combinator )
    {
        var temp = list.ToArray();
        for( int i = 0; i < temp.Length - 1; i++ )
            for( int j = i + 1; j < temp.Length; j++ )
                yield return combinator( temp[i], temp[j] );
    }
}

然后可以这样使用:

List<string> list1 = new List<string>() { "A", "B", "C", "D" };
var res = list1.Combinations( ( a, b ) => string.Format( "{0} against {1}", a, b ) );

如果您可以仅使用它IList而不是任何产品来支持它IEnumerable,则可以完全跳过此ToArray呼叫。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从列表中的每个项目中提取第二个元素以及其他问题

来自分类Dev

如何在Pandas中对列表列执行条件操作(考虑列表中的每个项目)

来自分类Dev

Python-将列表中的每个项目与该列表中的其他所有项目进行比较

来自分类Dev

Clojure-对列表中的每个项目进行操作

来自分类Dev

遍历集合,对每个项目执行操作并作为列表返回

来自分类Dev

循环查看列表中的每个项目

来自分类Dev

在Java中修改列表的每个项目

来自分类Dev

RxSwift-获取列表中的每个项目

来自分类Dev

RxJava-获取列表中的每个项目

来自分类Dev

对列表中的每个项目重复整个df

来自分类Dev

将列表中的每个项目加倍

来自分类Dev

从列表的每个元素中获取最长的项目

来自分类Dev

Selenium - 从列表中的每个项目收集信息

来自分类Dev

如何显示 PureScript 列表中的每个项目

来自分类Dev

为列表中的每个项目创建对象

来自分类Dev

将列表中的每个项目与列表中的其他所有项目进行比较,检查它们是否属于已定义的时间间隔

来自分类Dev

从其他活动的列表中删除项目

来自分类Dev

ComboBox:每个项目上的按钮(用于从列表中删除项目)

来自分类Dev

如何左右对齐HTML和CSS中的每个备用列表项以及项目符号

来自分类Dev

根据单击的项目操作ListView中的其他列表项目

来自分类Dev

布尔列表检查列表中的每个项目是否为假

来自分类Dev

为每个循环遍历列表时删除列表中的项目

来自分类Dev

在 onNext 之前对 observable 中的每个项目执行非转换操作

来自分类Dev

从Java中的列表中的每个项目中删除角色

来自分类Dev

对yii框架中的列表中的每个项目使用模式

来自分类Dev

让列表中的每个元素都包含其他元素

来自分类Dev

获取列表中每个元素到其他元素的距离

来自分类Dev

will_paginate列表中每个项目的正确编号?

来自分类Dev

Python-列表中每个项目后的换行符

Related 相关文章

  1. 1

    从列表中的每个项目中提取第二个元素以及其他问题

  2. 2

    如何在Pandas中对列表列执行条件操作(考虑列表中的每个项目)

  3. 3

    Python-将列表中的每个项目与该列表中的其他所有项目进行比较

  4. 4

    Clojure-对列表中的每个项目进行操作

  5. 5

    遍历集合,对每个项目执行操作并作为列表返回

  6. 6

    循环查看列表中的每个项目

  7. 7

    在Java中修改列表的每个项目

  8. 8

    RxSwift-获取列表中的每个项目

  9. 9

    RxJava-获取列表中的每个项目

  10. 10

    对列表中的每个项目重复整个df

  11. 11

    将列表中的每个项目加倍

  12. 12

    从列表的每个元素中获取最长的项目

  13. 13

    Selenium - 从列表中的每个项目收集信息

  14. 14

    如何显示 PureScript 列表中的每个项目

  15. 15

    为列表中的每个项目创建对象

  16. 16

    将列表中的每个项目与列表中的其他所有项目进行比较,检查它们是否属于已定义的时间间隔

  17. 17

    从其他活动的列表中删除项目

  18. 18

    ComboBox:每个项目上的按钮(用于从列表中删除项目)

  19. 19

    如何左右对齐HTML和CSS中的每个备用列表项以及项目符号

  20. 20

    根据单击的项目操作ListView中的其他列表项目

  21. 21

    布尔列表检查列表中的每个项目是否为假

  22. 22

    为每个循环遍历列表时删除列表中的项目

  23. 23

    在 onNext 之前对 observable 中的每个项目执行非转换操作

  24. 24

    从Java中的列表中的每个项目中删除角色

  25. 25

    对yii框架中的列表中的每个项目使用模式

  26. 26

    让列表中的每个元素都包含其他元素

  27. 27

    获取列表中每个元素到其他元素的距离

  28. 28

    will_paginate列表中每个项目的正确编号?

  29. 29

    Python-列表中每个项目后的换行符

热门标签

归档