c#,将程序更改为线性搜索
我几天前编写了这段代码,有一个非常简单的问题。我知道有人问过这样的问题,但我找不到任何特别适合我的案例。我想把案例3中的搜索函数改成一个不太复杂的搜索方法,所以我基本上想用线性搜索来代替它。如果不可能,我想在其他地方实现线性搜索。你们有什么线索吗?感谢所有的帮助c#,将程序更改为线性搜索,c#,replace,linear-search,C#,Replace,Linear Search,我几天前编写了这段代码,有一个非常简单的问题。我知道有人问过这样的问题,但我找不到任何特别适合我的案例。我想把案例3中的搜索函数改成一个不太复杂的搜索方法,所以我基本上想用线性搜索来代替它。如果不可能,我想在其他地方实现线性搜索。你们有什么线索吗?感谢所有的帮助 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; namespace Logg
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace Loggbok
{
class MainClass
{
public static void Main(string[] args)
{
DateTime tiden = DateTime.UtcNow;//Skriver ut tiden vid varje inlägg
bool running = true;//Ger ett booleskt värde till variabeln running för att kunna skapa en loop
List<string[]> loggbok = new List<string[]>();//Här skapas listan som innehåller arrayen
while (running)//Här skapas loopen
{
Console.WriteLine("\n************************************");
Console.WriteLine("\nVälkommen till loggboken!");
Console.WriteLine("\n************************************");
Console.WriteLine("\n[1] Skriv nytt inlägg i loggboken");
Console.WriteLine("[2] Skriv ut alla loggar");
Console.WriteLine("[3] Sök inlägg i loggboken");
Console.WriteLine("[4] Radera innehåll i loggboken");
Console.WriteLine("[5] Avsluta loggboken");
Console.WriteLine("\n************************************");
Console.Write("\nVälj: ");
int option;//Int eftersom valet ska vara ett heltal
try
{
option = Int32.Parse(Console.ReadLine());//testar så att inmatningen är av typen Int
}
catch
{
Console.WriteLine("Fel, du får bara skriva in nummer");//Felmeddelande om inmatningen är en bokstav
continue;
}
switch (option)
{
case 1:
string[] logg = new string[2];//Här deklareras arrayen
Console.WriteLine("\n************************************");
Console.WriteLine(tiden);
Console.WriteLine("Ange en Titel:");
logg[0] = Console.ReadLine();//Här sparas titeln
Console.Clear();
Console.WriteLine("\n************************************");
Console.WriteLine("Skriv inlägg:");
logg[1] = String.Format("{0}{1}{2}", Console.ReadLine(), Environment.NewLine, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));//Här sparas inlägget samt datum och tid, detta är möjligt tack vare formattering
loggbok.Add(logg);
break;
case 2:
foreach (string[] item in loggbok)//För att skriva ut alla items i loggboken
{
Console.WriteLine("\n--------------------------------------\n ");
Console.WriteLine(item[0]);//För att skriva ut titel
Console.WriteLine(item[1]);//För att skriva ut inlägg
Console.WriteLine("\n--------------------------------------\n ");
}
Console.ReadLine();
break;
case 3:
Console.WriteLine("\n************************************");
Console.WriteLine("Skriv in ett ord du vill söka efter i loggboken:");
var nyckelord = Console.ReadLine();//Här sparas inmatningen av nyckelordet
var entries = loggbok.Where(entry => entry.Any(item =>item.IndexOf(nyckelord, StringComparison.OrdinalIgnoreCase) > -1));//För att kontrollera om nyckelordet finns samt ignorera skiftlägeskänslighet, och finna både titel och inlägg
foreach (var entry in entries)//för att finna alla inlägg/titlar som matchar nyckelord
{
Console.WriteLine("\n--------------------------------------\n ");
Console.WriteLine(string.Join(", ", entry));//Skriver ut titel samt inlägg som matchat nyckelordet
Console.WriteLine("\n--------------------------------------\n ");
}
if (entries.Count() == 0)//Om ingen matchning hittas
{
Console.WriteLine("\n--------------------------------------\n ");
Console.Write("Din sökning misslyckades...");//Felmeddelande om ingen matchning hittas
Console.WriteLine("\n--------------------------------------\n ");
}
break;
case 4:
Console.WriteLine("\n************************************");
Console.WriteLine("Skriv titeln på det inlägg du vill ta bort:");
string title = Console.ReadLine();//Sparar titeln på inlägget användaren vill radera
for (int x = 0; x < loggbok.Count; x++) //Loopa igenom varje titel
{
if (String.Equals(loggbok[x][0], title, StringComparison.OrdinalIgnoreCase)) //Icke skiftlägeskänslig matchning av titeln.
{
loggbok.RemoveAt(x); //Matchning funnen.
}
else
{
Console.WriteLine("Titeln finns inte, återgår till huvudmenyn");
}
}
break; //Avsluta loopen.
case 5:
running = false;//Avslutar loopen och därmed programmet
break;
default:
Console.WriteLine("Nu blev det fel, välj mellan [1] [2] [3] [4] [5]");//Felmeddelande om valet är någon annan siffra än de som menyn innehåller
break;
}
}
}
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用System.IO;
名称空间Loggbok
{
类主类
{
公共静态void Main(字符串[]args)
{
DateTime tiden=DateTime.UtcNow;//Skriver ut tiden vid varje inlägg
bool running=true;//gerett booleskt värde直到variabeln在kunna skapa循环中运行
List loggbok=new List();//Här skapas listan som innehåller arrayen
(运行时)//Här skapas loopen
{
Console.WriteLine(“\n*******************************************”);
Console.WriteLine(“\nVälkommen till loggboken!”);
Console.WriteLine(“\n*******************************************”);
Console.WriteLine(“\n[1]Skriv nyt inlägg i loggboken”);
控制台写入线(“[2]Skriv ut alla loggar”);
Console.WriteLine(“[3]Sök inlägg i loggboken”);
Console.WriteLine(“[4]Radera innehåll i loggboken”);
控制台写入线(“[5]Avsluta loggboken”);
Console.WriteLine(“\n*******************************************”);
Console.Write(“\nVälj:”);
int option;//int eftersom代客泊车ska vara ett heltal
尝试
{
option=Int32.Parse(Console.ReadLine());//testar såatt inmatningeär av typen Int
}
接住
{
Console.WriteLine(“在努默尔的费尔·巴拉·斯克里瓦”);//在博克斯塔夫的特宁根岛上的费尔梅德德兰德
持续
}
开关(选件)
{
案例1:
string[]logg=新字符串[2];//Här deklareras arrayen
Console.WriteLine(“\n*******************************************”);
控制台写入线(tiden);
控制台写入线(“Ange en Titel:”);
logg[0]=Console.ReadLine();//Här sparas titeln
Console.Clear();
Console.WriteLine(“\n*******************************************”);
Console.WriteLine(“Skriv inlägg:”);
logg[1]=String.Format(“{0}{1}{2}”、Console.ReadLine()、Environment.NewLine、DateTime.Now.ToString(“yyyy-MM-dd HH:MM:ss”);//Här sparas inlägget samt datum och tid、dettaär möjligt tack vare格式化
loggbok.Add(logg);
打破
案例2:
foreach(loggbok中的字符串[]项)//För att skriva ut alla items i loggboken
{
Console.WriteLine(“\n--------------------------------------------\n”);
Console.WriteLine(项[0]);//För att skriva ut titel
Console.WriteLine(项目[1]);//För att skriva ut inlägg
Console.WriteLine(“\n--------------------------------------------\n”);
}
Console.ReadLine();
打破
案例3:
Console.WriteLine(“\n*******************************************”);
Console.WriteLine(“Skriv in ett ord du vill söka efter i loggboken:”);
var nyckelord=Console.ReadLine();//Här sparas inmatningen av nyckelordet
var entries=loggbok.Where(entry=>entry.Any(item=>item.IndexOf(nyckelord,StringComparison.OrdinalIgnoreCase)>-1));//För att kontrollera om nyckelordet finns samt ignorera skiftlägeskänslighet,och finna både titel och inlägg
foreach(条目中的var条目)//för att finna alla inlägg/titlar som match ar nyckelord
{
Console.WriteLine(“\n--------------------------------------------\n”);
Console.WriteLine(string.Join(“,”,entry));//Skriver ut titel samt inlägg som match at nyceLordet
Console.WriteLine(“\n--------------------------------------------\n”);
}
if(entries.Count()==0)//Om ingen匹配hittas
{
Console.WriteLine(“\n--------------------------------------------\n”);
Console.Write(“Din sökning misslyckades…”);//Felmedelande om ingen Matching hittas
Console.WriteLine(“\n--------------------------------------------\n”);
}
打破
案例4:
Console.WriteLine(“\n*******************************************”);
Console.WriteLine(“Skriv titeln pådet inlägg du vill ta bort:”);
string title=Console.ReadLine();//Sparar titeln påinlägget användaren vill radera
对于(int x=0;xstatic IEnumerable<string[]> SearchByKeyword(IEnumerable<string[]> loggbok,
string nyckelord) {
return loggbok.Where(entry => entry
.Any(item => item.IndexOf(nyckelord,
StringComparison.OrdinalIgnoreCase) > -1));
}
var entries = SearchByKeyword(loggbok, nyckelord);