【问题标题】:Returning array indices for positive array values - The array being part of a Tuple返回正数组值的数组索引 - 数组是元组的一部分
【发布时间】:2019-07-10 15:46:52
【问题描述】:

我有以下包含一个元组的列表:

List<Tuple<int, int[]>> someInfo = new List<Tuple<int, int[]>>();

现在,考虑到我的元组已填充了合理的值,我如何提取与 int[] 中大于 0 的值对应的所有索引?

例如,假设我的元组中的 int[] 已被初始化为:

int[] values = new int[] { -5, 5, 100, -52, 6 };

那么这个特定元组中所有正值(即 5、100 和 6)的返回索引列表应该是:1、2 和 4(基于 0 的索引)。
然后,我们需要对列表“someInfo”中的所有元组执行此操作。
可以将结果提取到 int[] 的列表中。

【问题讨论】:

    标签: c# arrays find tuples


    【解决方案1】:

    您可以使用Linq同时选择值和索引,然后过滤掉值不符合您的过滤条件的项目,并返回索引:

    List<Tuple<int, int[]>> someInfo = new List<Tuple<int, int[]>>
    {
        new Tuple<int, int[]>(1, new[] {0, -1, -2, -3, -4}),
        new Tuple<int, int[]>(1, new[] {-5, 5, 100, -52, 5}),
        new Tuple<int, int[]>(1, new[] {1, 2, 3, 4, 5})
    };
    
    List<int[]> positiveValueIndices = someInfo
        .Select(tuple => tuple.Item2
            .Select((value, index) => new {value, index})
            .Where(item => item.value > 0)
            .Select(item => item.index)
            .ToArray())
        .ToList();
    

    【讨论】:

    • 谢谢,有一个额外的层,元组是列表的一部分。
    • 那么您要寻找什么类型的结果? int[] 可能有重复值,因为它包含列表中所有元组的索引,并且您不知道它们属于哪个元组(即,如果您在列表中有三个元组并且只有第一个和第三个元组有正值,这两个值都在.Item2[0],那么结果数组将包含{0, 0}。你想要一个List&lt;int[]&gt;吗?
    • 是的,可以将结果提取到 List 中,这样每个元组的结果就不会混淆。谢谢。
    • 好的,我更新了答案。不过,如果问题以List&lt;Tuple&lt;int, int[]&gt;&gt; 的形式提供样本数据,而不仅仅是int[],那将会更有帮助。 :)
    • 漂亮,谢谢!当我的声誉允许时,我会给你一个 +1 :-)
    【解决方案2】:

    要获取单个数组的索引,您可以使用:

    Enumerable.Range(0, values.Length).Where(i => values[i] >= 0)
    

    获取整个列表的索引:

    someInfo.Select(tuple => Enumerable.Range(0, tuple.Item2.Length).Where(i => tuple.Item2[i] >= 0).ToArray()).ToList()
    

    【讨论】:

    • Select 有一个包含索引的重载,因此不需要Enumerable.Range hack。
    猜你喜欢
    • 2011-07-17
    • 2021-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多