【问题标题】:C# - Initializing an array within a loop to values in a different arrayC# - 将循环中的数组初始化为不同数组中的值
【发布时间】:2013-03-26 04:22:46
【问题描述】:

我有一个名为 str 的数组,它由一系列逗号分隔的对组成。例如,str[0] 是“比尔,约翰”。我试图遍历 str 并将逗号处的每一对拆分为名为 First 和 Second 的数组。我很难做到这一点,如果有人可以提供帮助,我将不胜感激。这是我正在使用的代码:

while (a < length)
{
    var Pairs = str[a].Split(',');
    Console.WriteLine(a + ": " + str[a]);
    first[a] = Pairs[0];
    second[a] = Pairs[1];
    a++;
}

我遇到的问题是第一[a] 和第二[a] 行。我无法弄清楚这些变量应该是什么数据类型,似乎我在 while 循环之前声明它们的每种类型都会出现不同的错误。

以下是我在循环内的变量实现中遇到的错误:
如果我将它们声明为数组:“无法使用 [] 将索引应用于 'System.Array' 类型的表达式”

Array first;
Array second;
while (a < length)
{
    var Pairs = str[a].Split(',');
    Console.WriteLine(a + ": " + str[a]);
    first[a] = Pairs[0];
    second[a] = Pairs[1];
    a++;
}

as ints: "无法将 [] 索引应用于 'int' 类型的表达式"

int first;
int second;
while (a < length)
{
    var Pairs = str[a].Split(',');
    Console.WriteLine(a + ": " + str[a]);
    first[a] = Pairs[0];
    second[a] = Pairs[1];
    a++;
}

作为字符串:“不能将属性或索引器'string.this[int]'分配给--它是只读的”

string first;
string second;
while (a < length)
{
    var Pairs = str[a].Split(',');
    Console.WriteLine(a + ": " + str[a]);
    first[a] = Pairs[0];
    second[a] = Pairs[1];
    a++;
}

as vars: "Implicitly-typed local variables must be initialized" (这个错误在声明中,而不是在循环本身。如果我初始化它,它会隐式转换为上述数据类型之一并抛出错误与我提到的他们相关联)

var first;
var second;
while (a < length)
{
    var Pairs = str[a].Split(',');
    Console.WriteLine(a + ": " + str[a]);
    first[a] = Pairs[0];
    second[a] = Pairs[1];
    a++;
}

【问题讨论】:

  • 你的代码有什么问题?
  • 您遇到了什么问题?你有例外吗?输出不正确?很难从文本中确定您想要什么/问题出在哪里。
  • 您的代码看起来没有任何问题。它可能会更好,但我希望它会起作用。
  • @Tyriar - 除非不清楚在哪里设置了长度。
  • @Hogan 目前还不清楚str 是不是正确的类型:P

标签: c# arrays loops


【解决方案1】:

基于新的编辑:

好的,从不使用类型 Array。它是内部的。要使用数组,您需要使用括号表示法(这看起来很奇怪,但这来自 C、C++ 和 Java。)

看起来像这样:

string [10] first;

但是,在更现代的 C# 中,您可以使用泛型。它们只是在现代面向对象的世界中更有意义。要使用它们,您需要指定它们操作的类型。在许多方面,它们的行为就像您期望数组可以工作但具有附加功能一样。要使用它们,在您的示例中,它看起来像这样:

ArrayList<string> first = new ArrayList<string>();
ArrayList<string> second = new ArrayList<string>();

foreach(string a in str)
{
    var Pairs = a.Split(',');
    first.Add(Pairs[0]);
    second.Add(Pairs[1]);
}

在 C# 中执行此操作的简单方法是使用 foreach 循环。

int index = 0;

foreach(string a in str)
{
    var Pairs = a.Split(',');
    first[index] = Pairs[0];
    second[index] = Pairs[1];
    index++;
}

但是,您的代码可以工作——除了我不知道长度是从哪里来的。也许你的代码应该是这样的?

int a = 0;
while (a < str.Length)
{
    var Pairs = str[a].Split(',');
    Console.WriteLine(a + ": " + str[a]);
    first[a] = Pairs[0];
    second[a] = Pairs[1];
    a++;
}

【讨论】:

  • Length 只是我之前计算的一个文本文件的长度。我遇到的问题是第一[a] 和第二[a] 行。我无法弄清楚这些变量应该是什么数据类型,似乎我在 while 循环之前声明它们的每种类型都会出现不同的错误。
  • @noclist - 你必须在你的问题中描述问题——你得到了什么错误,输入什么?我们无法读懂你的想法。
【解决方案2】:

试试这个

string[] str = new string[1];

        str[0] = "Bill,John";

        string[] first = new string[1];
        string[] second = new string[1];
        string[] pairs = new string[1];

        int a = 0;
        while(a<str.Length)
        {
            pairs = str[a].Split(',');
            first[a] = pairs[0];
            second[a] = pairs[1];
            Console.WriteLine(first[a] + " - " + second[a]);
            a++;
        }

        int i = 0;
        foreach (string item in str)
        {
            pairs = item.Split(',');
            int k = pairs.Count();
            first[i] = pairs[0];
            second[i] = pairs[1];
            Console.WriteLine(first[i] + " - " + second[i]);
            i++;
        }

【讨论】:

  • 很好地解决了我的回答@yug。您可能会考虑为您的答案带来新的东西,而不是仅仅应对已经存在的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-22
  • 1970-01-01
相关资源
最近更新 更多