Я сделал консольное приложение, которое должно перебирать два массива строк и выбирать значения, которые содержатся во вводе пользователя, и показывать эти значения в наборе "строка". К сожалению, я получил ошибку System.Collections.Generic.List '1 [System.String] Вот код приложения:
static void Main(string[] args)
{
string[,] words = new string[,]
{
{ "5", "" },
{ "10", "kare" },
{ "20", "kanojo" },
{ "1", "karetachi" },
{ "7", "korosu" },
{ "3", "sakura" },
{ "3", "" }
};
try
{
var pre = Console.ReadLine();
var r = Enumerable
.Range(0, words.GetLength(0))
.Where(i => words[i, 1] == pre)
.Select(i => words[i, 1])
.OrderBy(i => words[Int32.Parse(i), 0])
.ToList();
Console.Write(r);
}
catch (Exception ex)
{
TextWriter errorWriter = Console.Error;
errorWriter.WriteLine(ex.Message);
}
Console.ReadLine();
}
Ваш запрос неверен: вы пытаетесь сопоставить каждое слово из списка со всем входом пользователя, что означает, что вы всегда выбираете одно слово (если в двумерном массиве нет дубликатов). Однако, поскольку вы сортируете результаты, похоже, вы ожидаете, что будет более одного слова.
Чтобы исправить это, замените критерии выбора на использование Contains
, например:
var r = Enumerable
.Range(0, words.GetLength(0))
.Where(i => pre.Contains(words[i, 1]))
.Select(i => new {i, w=words[i, 1]})
.OrderBy(p => Int32.Parse(words[p.i, 0]))
.Select(p=>p.w)
.ToList();
Чтобы отобразить результаты в одной строке, вы можете использовать string.Join
:
Console.WriteLine("Results: {0}", string.Join(", ", r));
Примечание. Я предполагаю, что упражнение требует использования двумерного массива. Если такого требования нет, вы можете использовать массив кортежей или анонимных типов, позволяя избежать разбора целого числа:
var words = new[] {
new { Priority = 5, Word = "" }
, new { Priority = 10, Word = "kare" }
, new { Priority = 20, Word = "kanojo" }
, ... // and so on
};
Это не ошибка, что происходит, когда вы показываете результат вызова функции ToString в List.
(т.е. ваше утверждение работает правильно, вы просто не показываете его так, как думаете... видите?)
Пытаться:
Console.Write(r.Aggregate((a,b) => a + "," + b));
вместо
Console.Write(r);
Console.Write(r.Count());
или Console.Write(string.Join("\r\n",r.ToArray)
List<List<int>> a2DList = new List<List<int>>()
{
new List<int>()
{
0,1,2,3
},
new List<int>()
{
4,5,6,7,8
}
};
Console.WriteLine(string.Join(",",a2DList.SelectMany(s => s).ToArray().Select(s => s)));