【问题标题】:Jagged arrays, populating them from a List<string>锯齿状数组,从 List<string> 填充它们
【发布时间】:2012-11-27 22:17:24
【问题描述】:

用户在文本框中输入一系列值:

Textbox 1: 10,9,8,7

Textbox 2: 1,2,3,4

然后我想对这两个字符串进行排序并填充List&lt;string&gt;。一旦排序(已经弄清楚如何做那部分),我喜欢创建一个输入的锯齿状数组,如下所示:

string[][] Arr = new string[2][];

Arr[0] = new string[] { "10", "9", "8", "7" };
Arr[1] = .....

但不是手动输入值,id 喜欢使用上面提到的List&lt;string&gt;。

这可能吗(到目前为止,我的尝试都失败了)?如果没有,有人可以提出一种可能的替代方法吗?

感谢您的宝贵时间!

编辑:根据答案,我得到了它的工作。再次抱歉,我没有说清楚我所说的排序。

List<string> tempString = new List<string>();
tempString.Add("10,9,8,7");
tempString.Add("1,2,3");

string[][] Arr = new string[2][];

for (int x = 0; x < 2; x++)
{
    string[] values = tempString[x].Split(',').ToArray();

    Arr[x] = values;
}

【问题讨论】:

  • TextBox.GetValue() 和 String.Split?
  • 我不明白你的问题。哪个部分导致您的问题?解析用户输入的字符串?
  • 所以您想为每个文本框创建一个List&lt;string&gt;,然后将每个文本框转换为string 的数组,然后将其添加到您的锯齿状数组中?我看不出有List&lt;string&gt; 的意义——只需将字符串解析为数组,然后将其添加到锯齿状数组中。但也许我错过了一些东西。
  • 不清楚您要达到的目标。您是否希望用户将逗号分隔的值输入到 2 个文本框中,然后组合并排序到一个列表中?不确定锯齿状数组的来源......
  • 我想要列表 这样我就可以确定哪个文本框是数字 1,哪个是数字 2 等等。字符串“10,9,8,7”的顺序 = 1st和 "1,2,3,4" = 2nd 很重要,但不是其中内容的实际顺序。抱歉没有说得特别清楚。

标签: c# list c#-4.0 jagged-arrays


【解决方案1】:

从字符串创建列表:

List<string> list1 = new List<string>(textbox1.Text.Split(','));
List<string> list2 = new List<string>(textbox2.Text.Split(','));

对列表进行排序:

list1.Sort();
list2.Sort();

现在您可以轻松地从列表中创建数组:

string[][] Arr = new string[2][];
Arr[0] = list1.ToArray();
Arr[1] = list2.ToArray();

如果您想按其他顺序进行操作,即先排序然后拆分,则为:

List<string> list = new List<string>();
list.Add(textbox1.Text);
list.Add(textbox2.Text);
list.Sort();
string[][] Arr = new string[2][];
Arr[0] = list[0].split(',');
Arr[1] = list[1].split(',');

【讨论】:

  • 我试过这个,但我一直收到一个错误,提示无法从 char[] 转换为字符串。请查看对我原来问题的修改。
  • @HansRudel:您拥有的不是两个字符串列表,可以对字符串进行排序,您只有一个包含来自文本框的两个字符串的列表。将单个字符串转换为数组时,会得到一个字符数组。看看我上面添加的代码。
  • 是的,我设法让它工作。我已将您的答案和其他 2 个答案标记为 +1,因为我应该更清楚地解释我所说的排序的含义。非常感谢您的帮助。
【解决方案2】:
Arr[0] = textBox1.Text.Split(',');
Arr[1] = textBox2.Text.Split(',');

编辑如果你需要对列表进行预处理,你可以这样做:

var array1 = textbox1.Text.Split(',').OrderBy(x => x).ToArray();
var array2 = textbox2.Text.Split(',').OrderBy(x => x).ToArray();
// extra processing here
string[][] Arr = new string[2][];
Arr[0] = array1;
Arr[1] = array2;

【讨论】:

  • 使用文本框中的原始数据,而不是 OP 已经创建和排序的列表。
【解决方案3】:
string[][] Arr = new string[]{textBox1.Text, textBox2.Text} //<--or "tempString"
                    .Select(s => s.Split(','))
                    .ToArray();

【讨论】:

  • 马安!你认为每个人都会得到你指定的东西吗
  • @Sivaraman 但是分配的左侧string[][] Arr 暗示它产生了什么
猜你喜欢
  • 1970-01-01
  • 2018-09-15
  • 2020-10-31
  • 2021-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-04
  • 2014-04-22
相关资源
最近更新 更多