#c# #list #foreach
#c# #Список #foreach
Вопрос:
Я пытаюсь выполнить пробный тест LeetCode..
Given an array nums of n integers, are there elements a, b, c in nums such that a b c = 0? Find all unique triplets in the array which gives the sum of zero.
может кто-нибудь посоветовать, где я ошибаюсь…помечать
Line 8: Char 30: error CS0029: Cannot implicitly convert type 'System.Collections.Generic.List<System.Linq.IGrouping<int, int>>' to 'System.Collections.Generic.List<int>' (in Solution.cs)
Line 12: Char 16: error CS0266: Cannot implicitly convert type 'System.Collections.Generic.List<System.Collections.Generic.List<int>>' to 'System.Collections.Generic.IList<System.Collections.Generic.IList<int>>'. An explicit conversion exists (are you missing a cast?) (in Solution.cs)
public class Solution {
public IList<IList<int>> ThreeSum(int[] nums) {
List<List<int>> myList = new List<List<int>>();
foreach(var i in nums)
{
List<int> triplets = nums.GroupBy(x => x).Where(y => y.Count() >= 3).ToList();
myList.Add(triplets);
}
return myList;
}
}
ИТАК, ThreeSum — это интерфейс списка списков.
Итак, я создаю свой возвращаемый объект myList
Перебор каждого элемента в nums
создание триплета списка, получение значений,
и добавление их в myList.
Я знаю, что проблема связана со списком списков int, и я добавляю список к этому.
Так что триплеты должны быть списком списков целых чисел.
Я думаю, тогда вопрос в том, как мне заполнить список списков целых чисел одним списком??
Комментарии:
1. Ваша проблема связана с правильностью алгоритма или синтаксисом c #? Или оба?
Ответ №1:
Первая ошибка заключается в том, что список внутри цикла for не того типа, который возвращает выражение. Возвращается GroupBy List<System.Linq.IGrouping<int, int>>
, поэтому это можно решить, изменив либо выражение, чтобы возвращать список целых чисел, либо изменив тип, чтобы соответствовать возвращаемому значению ( List<System.Linq.IGrouping<int, int>>
). Я бы подумал, что изменение выражения будет работать лучше, глядя на то, что вы делаете со значением после. Вторая ошибка заключается в том, что тип возвращаемого вашим методом значения отличается от возвращаемого вами типа. Ваше объявление предполагает, что вы вернете, IList<IList<int>>
каким бы ни был объект myList List<List<int>>
. Они должны совпадать, поэтому либо измените объявление метода, либо тип объекта myList, чтобы они соответствовали. Я предполагаю, что ваше объявление, вероятно, правильное, поэтому я бы изменил объект myList на соответствующий.