IT박스

List에서 고유 한 값 목록 가져 오기

itboxs 2020. 6. 5. 21:09
반응형

List에서 고유 한 값 목록 가져 오기


C #에서는 세 개의 String 멤버 변수가있는 Note라는 클래스가 있다고 가정합니다.

public class Note
{
    public string Title;
    public string Author;
    public string Text;
}

그리고 참고 유형 목록이 있습니다.

List<Note> Notes = new List<Note>();

저자 열에서 모든 고유 값 목록을 얻는 가장 깨끗한 방법은 무엇입니까?

목록을 반복하고 다른 문자열 목록에 중복되지 않는 모든 값을 추가 할 수는 있지만 더럽고 비효율적입니다. 한 줄에 이것을 할 마법의 Linq 구조가 있다고 생각하지만 아무것도 만들 수 없었습니다.


Notes.Select(x => x.Author).Distinct();

고유 값당 하나씩 일련 IEnumerable<string>Author( )을 반환 합니다.


저자별 노트 클래스 구분

var DistinctItems = Note.GroupBy(x => x.Author).Select(y => y.First());

foreach(var item in DistinctItems)
{
    //Add to other List
}

Jon Skeet은 운영자 가있는 morelinq 라는 라이브러리를 작성했습니다 DistinctBy(). 구현에 대해서는 여기참조 하십시오 . 코드는 다음과 같습니다

IEnumerable<Note> distinctNotes = Notes.DistinctBy(note => note.Author);

업데이트 : 질문을 다시 읽은 후 Kirk는 다른 저자를 찾고 있다면 정답을 얻습니다.

DistinctBy에 몇 가지 필드 샘플이 추가되었습니다.

res = res.DistinctBy(i => i.Name).DistinctBy(i => i.ProductId).ToList();

public class KeyNote
{
    public long KeyNoteId { get; set; }
    public long CourseId { get; set; }
    public string CourseName { get; set; }
    public string Note { get; set; }
    public DateTime CreatedDate { get; set; }
}

public List<KeyNote> KeyNotes { get; set; }
public List<RefCourse> GetCourses { get; set; }    

List<RefCourse> courses = KeyNotes.Select(x => new RefCourse { CourseId = x.CourseId, Name = x.CourseName }).Distinct().ToList();

위의 논리를 사용하면 고유 한 것을 얻을 수 있습니다 Course.


mcilist = (from mci in mcilist select mci).Distinct().ToList();

참고 URL : https://stackoverflow.com/questions/10255121/get-a-list-of-distinct-values-in-list

반응형