基于大型字符串数组

时间:2017-08-02 23:11:56

标签: c# .net arrays

例如,我有一个字符串[]格式如下:

1000internal_ref
838Bdoesnt_have_to_start_with_internal_ref_and_this_can_be_as_long_as_it_needs_to_be

我需要获取前四个字符(在这种情况下为1000和838B)并将这些字符放在ListView中 - ID - 在ListView中,设置为"详细信息"模式,然后获取剩余的字符并将其放在第二列(内部)。它会显示如下,但不是文本形式,当然:

IDs  | Internals
---- | ---------------------------------------
1000 | internal_ref
838B | doesnt_have_to_start_with_internal_ref_and_this_can_be_as_long_as_it_needs_to_be

我的资源中有一个文本文件,其中包含应放在ListView中的字符串。它总是10348行,这就是为什么我专门为ListView设置的两个字符串数组那么长。字符串将使用'\r'进行拆分,以便将它们放入数组中。我已经看到了如何基于字符串数组向ListView添加项目的答案,但是如果它有多个列则没有。我不太确定如何做我需要做的事,这就是我现在所拥有的一切。

string[] foo = Properties.Resources.sfxlist.Split('\r');
string[] ids = new string[10348];
string[] inte = new string[10348];
int i = 0;
foreach (string s in foo)
{
    ids[i] = s.Take(4).ToArray().ToString(); // I've also tried doing it without ToArray(), no dice
    inte[i] = s.Skip(4).ToArray().ToString(); // see above
    i += 1;
}
1ListView.Items.Add("IDs").SubItems.AddRange(inte);
1ListView.Items.Add("Internals").SubItems.AddRange(ids);

2 个答案:

答案 0 :(得分:0)

这有效

var myArray = new string[]{"1000internal_ref", "838Binternal_ref_this_can_be_as_long_as_it_needs_to_be"};

var list = myArray.Select(i => 
   {
       var left = i.Substring(0, i.IndexOf("internal_ref"));
       var right = i.Substring(i.IndexOf("internal_ref"));
       return new { Id = left, Internals = right };
   }).ToList();

list.ForEach(x => Console.WriteLine(x.Id + "---" + x.Internals));
  

1000 --- internal_ref
  838B --- internal_ref_this_can_be_as_long_as_it_needs_to_be

现在,将列表绑定到列表视图

如果您的ID总是4个字符长,请将linq更改为

var list = myArray.Select(i => 
   {
       var left = i.Substring(0, 4);
       var right = i.Substring(4);
       return new { Id = left, Internals = right };
   }).ToList();

答案 1 :(得分:0)

在你的情况下,我会做以下事情:

1ListView.Columns.Add("IDs");
1ListView.Columns.Add("Internals");

1ListView.Items.AddRange(Properties.Resources.sfxlist.Split('\r')//split the value
    .Select(val => new ListViewItem(new string[]//assign a listviewitem to each value
    { val.Substring(0, IndexOf("internal_ref")),//the subitems consist of the two values
    val.Substring(IndexOf("internal_ref")) })).ToArray());

Tadaa,所有这些东西都在一个命令中: - )

此外,如果使用大量值,使用linq也可以使其快速,这不是最后一个方面。

如果这个答案有帮助,请告诉我。