【问题标题】:how to count an element in each index of Arraylist in c#如何在c#中计算Arraylist的每个索引中的元素
【发布时间】:2015-09-18 03:33:40
【问题描述】:

首先,我有一个包含所有字符的字符串,然后我将它添加到 list1 的 Arraylist 中,但我用 * 分隔它。所以现在我有 5 个数组列表元素。

String fString = "DAVCFW_ACK*DAVCFW_20_30_90*DAVCFW_15.5_20.1_35.0*DAVCFW_40_230_110*DAVCFW_END";
ArrayList list1 = new ArrayList();
string[] words = fString.Split('*');
foreach (string s in words)
{
    list1.Add(s);
 }

其次,我删除每个元素的前6个字符并将其保存到list2的Arraylist中。

ArrayList list2 = new ArrayList();
String s1 = list1.ToString();
foreach(string s in list1){
    for (int i = 0; i < s.Length; i++ ){
         if(i>6){
             list2[i-7] = list1[i];
         }
    }
}

第三,我删除每个elemeant的所有_字符并将其保存到list3的Arraylist中。现在我只得到数字而不是字符。

ArrayList list3 = new ArrayList();
String[] word_s1 = s1.Split('_');
foreach(string s in word_s1){
     list3.Add(s);
}

然后我想像矩阵一样保留list3 的值,但仍然是一个Arraylist。我需要知道 list3 的每个索引中的元素数来定义行和列。对于列,我想我可以使用 list3.count;但对于行我不知道如何。知道行后。我必须将 0 放入每个索引中行数小于行数的元素。

请帮助我。谢谢你。

【问题讨论】:

  • 什么样的矩阵? List&lt;List&lt;string&gt;&gt; 对你有好处吗?

标签: c# arraylist indexing element


【解决方案1】:

你有没有运行过这段代码?首先它不起作用,因为在第二个清单中您试图获得list1[7],其中最后一个索引是5。其次,在同一个清单中,您正在访问子循环中的元素,而不是字符。第三,你为什么这么做String s1 = list1.ToString()s1 等于字符串"System.Collections.ArrayList"

回到你的问题。如果要获取每一行的长度,只需使用 string.Length 属性。这是工作代码:

String fString = "DAVCFW_ACK*DAVCFW_20_30_90*DAVCFW_15.5_20.1_35.0*DAVCFW_40_230_110*DAVCFW_END";
ArrayList list1 = new ArrayList();
string[] words = fString.Split('*');
foreach (string s in words)
{
    list1.Add(s);
}

ArrayList list2 = new ArrayList();
foreach(string s in list1)
{
    list2.Add(s.Substring(6));
}

ArrayList list3 = new ArrayList();
foreach (string s in list2)
{
    list3.Add(s.Replace("_", string.Empty));
}

foreach (string s in list3)
{
    Console.WriteLine(s);
}

Console.WriteLine("Number of rows: {0}", list3.Count);
for (int i = 0; i < list3.Count; i++)
{
    Console.WriteLine("Number of characters in {0} row: {1}",i, (list3[i] as string).Length);
}

【讨论】:

  • 谢谢。那么专栏呢? :D
  • 等等,现在我不明白你的问题:) 你的行是list3 中的元素,所以list3.Count 给你行数。 List 中的每个元素都是您的单行。因为它们是字符串,所以您可以通过访问 Length 属性来获得“列数”。并且您可以使用字符进行操作,因此您可以编写逻辑来“将 0 放入每个索引中行数小于行数的元素”。如果你想有明确的列和行,我建议使用List&lt;List&lt;char&gt;&gt;
【解决方案2】:

问题不是很清楚你想要什么。如果您将项目位置作为列,值作为行的矩阵,您可以尝试这样的事情。

String fString = "DAVCFW_ACK*DAVCFW_20_30_90*DAVCFW_15.5_20.1_35.0*DAVCFW_40_230_110*DAVCFW_END";

Dictionary<int, ArrayList> matrix = new Dictionary<int,ArrayList>();
string[] words = fString.Split('*');
for (int i = 0; i < words.Length - 2 ; i++) // exclude the first and the last words because they do not have number
{
     string[] numbers = words[i+1].Substring(6).Split('_');
     ArrayList list = new ArrayList();
     for (int j = 1; j < numbers.Length; j++) // exlcude the first number as it is empty string
     {
         list.Add(numbers[j]);
     }
     matrix[i] = list;
}

【讨论】:

    猜你喜欢
    • 2016-08-30
    • 1970-01-01
    • 2017-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-12
    • 1970-01-01
    相关资源
    最近更新 更多