【问题标题】:Organizing arrays c#组织数组 c#
【发布时间】:2015-08-21 19:54:33
【问题描述】:

所以我在一个数组中有一组变量,我想从每个(比如说)第 4 个索引中收集数据。例如,如果我有数组 all[],它的数据位于 [0]->id [1]->field1 [2]->field2[3]->linebreak 之后以及另一组 [4]->id [5]->field1[6]->field2 [7]->linebreak 之后等等。现在我想创建一个名为 id[] 的数组(或列表),其中包含所有 id 和一个 field1[] ,其中包含所有字段。我怎么能这样做?

【问题讨论】:

  • How could I do this? 不是问题。它意味着“为我写”。展示你的努力和迄今为止所做的事情。
  • 将多种事物放在同一个数组中似乎是一个糟糕的设计决定。
  • 我只是对算法感兴趣。我正在考虑创建多个 for 循环,这些循环将从 all[0] 开始,并且可能每 4 个元素加载一次,但它需要我编写很多我不喜欢的 for 算法,而且它看起来很糟糕而且它不是总的来说是个好主意。我敢肯定有人有更好的方法来解决它。
  • 再次读取:看起来像文件中的字符串数组。我知道这是从哪里来的,但是仍然有更好(更好)读取文件的方法。
  • 我必须同意@EZI 的观点。最好的学习方法是尝试。当我们做错事情时,我们的大脑倾向于学习得最好,因为一旦我们做对了,这些知识就会在我们身上停留很长时间。当然,如果您完全无望地坚持自己创建的代码,请将其发布在此处,朝着正确的方向推进应该会让事情变得顺理成章。

标签: c# arrays .net organized


【解决方案1】:

您可以对每个数组元素的索引应用模 4 来确定其在其四人组中的位置。 ID 将位于位置 0;字段将位于位置 1 和 2。

int[] ids = all.Where((_, i) => i % 4 == 0).ToArray();
int[] fields = all.Where((_, i) => i % 4 == 1 || i % 4 == 2).ToArray();

【讨论】:

  • 我从未考虑过将_ 本身用作变量名。可爱。
  • 谢谢,这就是我要找的东西
  • @JoelCoehoorn:我也喜欢这里的_。我曾经使用 unicode 雪人作为 javascript 函数中的变量。还没有在 C# 中尝试过。
  • 现在看起来像 Haskell 一样。
  • @JoelCoehoorn:这是一个命名约定,表示该参数不会在匿名函数中使用。它起源于函数式语言(例如 Haskell),但在 C# lambda 中也是 picking up traction
【解决方案2】:

您可能会发现将数据存储在对象中更容易...

public class DataObject {

    public DataObject() {}
    public DataObject(string[] fields) {   
        // this is an example.  construct a .ctor that is sane for your data.
        // TODO:  Add array bounds checking and data sanity checks
        this.ID = fields[0];
        this.Field1 = fields[1];
        this.Field2 = fields[2];
    }

    public string ID {get; set;}

    public string Field1 {get; set;}

    public string Field2 {get; set;}
}

然后您将存储DataObject 的数组或类似数组的结构。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多