string[]
함수 호출에서 반환되는 C # 의 배열 로 작업하고 있습니다. Generic
컬렉션에 캐스팅 할 수 는 있었지만 temp 배열을 사용하여 더 좋은 방법이 있는지 궁금했습니다.
C # 배열에서 중복을 제거하는 가장 좋은 방법은 무엇입니까?
답변
LINQ 쿼리를 사용하여 다음을 수행 할 수 있습니다.
int[] s = { 1, 2, 3, 3, 4};
int[] q = s.Distinct().ToArray();
답변
HashSet <string> 접근 방식 은 다음과 같습니다 .
public static string[] RemoveDuplicates(string[] s)
{
HashSet<string> set = new HashSet<string>(s);
string[] result = new string[set.Count];
set.CopyTo(result);
return result;
}
불행히도이 솔루션에는 해당 버전까지 HashSet이 추가되지 않았으므로 .NET Framework 3.5 이상이 필요합니다. LINQ의 기능인 array.Distinct ()를 사용할 수도 있습니다 .
답변
다음 테스트 및 작동 코드는 배열에서 중복을 제거합니다. System.Collections 네임 스페이스를 포함해야합니다.
string[] sArray = {"a", "b", "b", "c", "c", "d", "e", "f", "f"};
var sList = new ArrayList();
for (int i = 0; i < sArray.Length; i++) {
if (sList.Contains(sArray[i]) == false) {
sList.Add(sArray[i]);
}
}
var sNew = sList.ToArray();
for (int i = 0; i < sNew.Length; i++) {
Console.Write(sNew[i]);
}
원한다면 이것을 함수로 묶을 수 있습니다.
답변
정렬해야 할 경우 중복을 제거하는 정렬을 구현할 수 있습니다.
그런 다음 하나의 돌로 두 마리의 새를 죽입니다.
답변
이것은 솔루션을 얼마나 엔지니어링하고 싶은가에 달려 있습니다. 배열이 그렇게 크지 않고 목록 정렬에 신경 쓰지 않는다면 다음과 비슷한 것을 시도해보십시오.
public string[] RemoveDuplicates(string[] myList) {
System.Collections.ArrayList newList = new System.Collections.ArrayList();
foreach (string str in myList)
if (!newList.Contains(str))
newList.Add(str);
return (string[])newList.ToArray(typeof(string));
}
답변
– 매번 인터뷰 질문 입니다. 이제 코딩을 완료했습니다.
static void Main(string[] args)
{
int[] array = new int[] { 4, 8, 4, 1, 1, 4, 8 };
int numDups = 0, prevIndex = 0;
for (int i = 0; i < array.Length; i++)
{
bool foundDup = false;
for (int j = 0; j < i; j++)
{
if (array[i] == array[j])
{
foundDup = true;
numDups++; // Increment means Count for Duplicate found in array.
break;
}
}
if (foundDup == false)
{
array[prevIndex] = array[i];
prevIndex++;
}
}
// Just Duplicate records replce by zero.
for (int k = 1; k <= numDups; k++)
{
array[array.Length - k] = '\0';
}
Console.WriteLine("Console program for Remove duplicates from array.");
Console.Read();
}
답변
List<String> myStringList = new List<string>(); foreach (string s in myStringArray) { if (!myStringList.Contains(s)) { myStringList.Add(s); } }
이것은 O (n ^ 2) 이며, 콤보에 채워질 짧은 목록에는 중요하지 않지만 큰 컬렉션에서 빠르게 문제가 될 수 있습니다.