c# - "प्रासंगिकता मान" द्वारा आदेश




winforms (2)

आप REgex के साथ LINQ का उपयोग करके प्रासंगिकता मानों के द्वारा खोज और आदेश कर सकते हैं। कृपया नीचे कोड का प्रयास करें:

var searchFor = "search";    
var newList = oldList.Select(l => new
        {
            SearchResult = l,
            RelevanceValue = (Regex.Matches(Regex.Escape(l.Text.ToLower()), searchFor.ToLower()).Count)
        })
            .OrderByDescending(r => r.RelevanceValue)
            .Select(r => r.SearchResult);

मैं Winforms आवेदन पर काम कर रहा हूँ मैं ListView पर एक फिल्टर लागू करना चाहते हैं एक फ़ोल्डर में किसी दिए गए नाम के साथ फ़ाइलें खोजते समय विंडोज़ में सटीक खोज सुविधा को लागू करने की आवश्यकता थी

यह पता चला है कि विंडोज फाइलें खोजने के लिए प्रासंगिकता मान का उपयोग कर रहा है

मैं सोच रहा था, हो सकता है कि winforms एक नियंत्रण या किसी अन्य में इस एल्गोरिथ्म लागू? या हो सकता है। NET कुछ कहाँ है? यदि नहीं, तो इस एल्गोरिथम के लिए कोई भी सी # कोड है कि मैं फ़िल्टर्ड ऑब्जेक्ट मैन्युअल रूप से ऑर्डर करने के लिए उपयोग कर सकता हूं:

var searchFor = "search";
var newList = oldList.Select(x =>x.Contains(searchFor))
                     .OrderBy(x => RelevanceValues(x,searchFor))
                     .ToList(); 

यहां यह प्राप्त करने के लिए एक उदाहरण है इस उदाहरण में फ़ाइल सूची के साथ प्रासंगिकता मान के आदेश शामिल हैं।

कोड:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Windows.Forms;    

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        // textBox1 for search string
        private System.Windows.Forms.TextBox textBox1;
        // listView1 for show result
        private System.Windows.Forms.ListView listView1;
        private System.Windows.Forms.Button button1; 

        public Form1()
        {
            InitializeComponent();
        }   

        class MyListViewItem : ListViewItem
        {
            public int Index { get; set; }
        }  

        private void button1_Click(object sender, EventArgs e)
        {
            List<MyListViewItem> myList = new List<MyListViewItem>();

            // open folder browser to get folder path    
            FolderBrowserDialog result = new FolderBrowserDialog();
            if (result.ShowDialog() == DialogResult.OK)
            {
                // get all file list
                string[] files = Directory.GetFiles(result.SelectedPath);
                foreach (string item in files)
                {
                    // find the relevance value based on search string
                    int count = Regex.Matches(Regex.Escape(item.ToLower()), textBox1.Text.ToLower()).Count;
                    myList.Add(new MyListViewItem() { Text = item, Index = count });
                }
            }

            List<ListViewItem> list = new List<ListViewItem>();
            // add file name in final list with order by relevance value
            foreach (var item in myList.OrderByDescending(m => m.Index).ToList())
            {
                list.Add(new ListViewItem() { Text = item.Text });
            }

            listView1.Items.AddRange(list.ToArray());
        }
    }
}






winforms