Fun<>, 익명 메서드, Lambda 표현식 거품 정렬 C#

8462 단어 lambda

대두문


나누다

거품 정렬 C# 구현, 의뢰 사용, 3가지 방식 포함:Fun<>, 익명 방법, Lambda 표현식


거품 정렬은 간단한 정렬 방법으로 소량의 숫자 정렬에 적합하며 대량의 숫자(10개 이상)에 대해 더욱 효율적인 정렬 방법도 있다.여기서 실현된 거품 정렬은 기능을 실현해야 한다. 숫자 정렬뿐만 아니라 임의의 대상에 대해서도 정렬해야 한다.
예:
  • People 대상에 대한 Age(연령) 순서
  • Student 객체에 대한 Score(분수) 정렬
  • People:
        public class People { public string Name { get; set; } public int Age { get; set; } public People(string name, int age) { Name = name; Age = age; } public static bool CompareAge(People p1, People p2) { return p1.Age < p2.Age; } public override string ToString() { return string.Format("[people] name:{0},age:{1}", Name, Age); } } 

    Student:
        public class Student { public string Name { get; set; } public float Score { get; set; } public Student(string name, float score) { Name = name; Score = score; } public static bool CompareScore(Student s1, Student s2) { return s1.Score < s2.Score; } public override string ToString() { return string.Format("[student] name:{0},score:{1}",Name,Score); } } 

    거품 정렬의 실현은 Fun<>의 의뢰 작성법을 모르면 마지막으로 설명합니다.
        public static class Storter_Fun { public static void Sort<T>(IList<T> sortArray, Func<T, T, bool> comparision) { bool swapped = true; do { swapped = false; for (int i = 0; i < sortArray.Count - 1; i++) { if (comparision(sortArray[i + 1], sortArray[i])) { T temp = sortArray[i]; sortArray[i] = sortArray[i + 1]; sortArray[i + 1] = temp; swapped = true; } } } while (swapped); } } 

    콘솔, 정렬 사용:
            static void Main(string[] args) { //  People[] peoples = {new People(" ",43), new People(" ",12), new People(" ",50), new People(" ",21), new People(" ",33),}; //Fun<>  BubbleSorter.Storter_Fun.Sort<People>(peoples, People.CompareAge); //  BubbleSorter.Storter_Fun.Sort<People>(peoples, delegate(People p1, People p2) { return p1.Age < p2.Age; }); //Lambdah  BubbleSorter.Storter_Fun.Sort<People>(peoples, (People p1, People p2) => { return p1.Age < p2.Age; }); foreach (var people in peoples) { Console.WriteLine(people); } //  Student[] students = {new Student(" ",80.5F), new Student(" ",85), new Student(" ",88), new Student(" ",70), new Student(" ",95),}; BubbleSorter.Storter_Fun.Sort<Student>(students, Student.CompareScore); foreach (var student in students) { Console.WriteLine(student); } Console.ReadKey(); } 

    의뢰: 호출 방법의 매개 변수는 일반적으로 수치형입니다. 예를 들어 int,string,DataTable 등입니다. 방법 자체를 매개 변수로 다른 방법에 전달할 수 있습니까?의뢰는 이 문제를 해결하는 것이다.매개 변수라면 유형이 있어야 한다.C#는 강한 유형이고 방법의 매개 변수는 int 유형이므로string 유형을 전송할 수 없습니다. 그렇지 않으면 편집 단계에서 잘못 보고합니다.int,string 등은 기존 형식입니다. 의뢰한 형식은 사용자 정의가 필요합니다.예:
  • Fun는 두 개의 일반 매개 변수를 전송하고 bool을 되돌려주는 것을 대표한다.
  • Fun는 세 가지 인자를 전송하는 것을 대표한다. int,string,DataTable,array;마지막 매개 변수가 되돌아오는 값 형식이다.그러면 되돌아오는 값이 없으면?
  • Action는 두 개의 일반 매개 변수를 전송하고 값을 되돌려 주지 않는 것을 대표한다
  • Action의 대표 방법은 두 개의 매개 변수를 전송하는 것이다. int,string, 반환 값이 의뢰의 유형을 정의하지 않으면 전송의 방법은 반드시 이 정의에 부합되어야 한다. 즉, 전송 매개 변수, 유형, 개수, 순서, 반환 값이 일치해야 한다. 그렇지 않으면 컴파일되지 않고 C#가 강한 유형의 원인이다.

  • 방금 실현된 거품은 서로 다른 대상의 정렬을 지원할 수 있는데 주로 거품을 크기를 비교하는 방법으로 전달(위탁)하고 데이터를 교환하는 임시 변수와 범용 실현을 사용한다.
     
    분류:
    C#

    좋은 웹페이지 즐겨찾기