Как извлечь из списка на основе пользовательского ввода - PullRequest
0 голосов
/ 28 декабря 2018

Код содержит два метода.

  1. Main , который запрашивает ввод данных пользователем и печатает подсписок на основе указанного ввода пользователя.
  2. Метод Извлечь передает запрос из пользовательского ввода и добавляет все индексы к dbQueryList для извлечения из dbListing и печати в виде запроса.

Как добавить к List на основе пользовательского ввода?

Основной проблемой является оператор if , который содержит условиеi.Substring(0, query.Length) = query.Это предназначено для проверки условия «если часть запроса существует в каком-либо индексе в dbListing, добавьте элементы в dbQueryList».

Первоначально я написал это на Python, и он отлично работал.Я изучаю C # и не уверен, как изменить это if условие.Я подумывал об изменении кода и использовании LINQ в цикле foreach, но не совсем ясно, как это реализовать.

Ждем отзывов сообщества!:)


//**************************************************
// File Name:        autocomplete.cs
// Version:          1.0
// Description:      Create a method that functions like an autocomplete
//                   API and truncates search to 5 results.
// Last Modified:    12/19/2018
//**************************************************

using System;
using System.Collections.Generic;

namespace autocomplete
{
    class Program
    {
        private static string[] database;
        private static string input;
        private static string query;

    static void Main(string[] args)
    {
        // user input to pass as query
        Console.Write("Enter your query: ");
        string query = Console.ReadLine();

        // dynamic list comprised of 'database' array
        List<string> dbListing = new List<string>();
        string[] database = new string[] { "abracadara", "al", "alice", "alicia", "allen", "alter","altercation", "bob", "element", "ello", "eve", "evening", "event", "eventually", "mallory" };
        dbListing.AddRange(database);

        // write results based on user query
        Console.WriteLine("Your results: " + Extract(Program.query));
        // keep console window open after displaying results
        Console.ReadLine();
    }

    // extract method passing query, return dbQueryList as query
    public static List<string> Extract(string query)
    {

        // empty list is initiated
        List<string> dbQueryList = new List<string>();

       // foreach assesses all strings in database in main
       // then, appends all indices of list equal to given query
        foreach (string i in database)
        {
            // compares query (from index 0 to length of) to all strings in database

            if (i.Substring(0, query.Length) = query)
            {
                // add to list above based on query
                dbQueryList.Add(i);
            }
            // if statement truncates dbQueryList to 5 results
            if (dbQueryList.Capacity >= 5)
                break;
        }
        return dbQueryList;
    }
}

ОБНОВЛЕНИЕ: 03.01.2009 18: 30

Я внес следующие изменения в Extract(query), и это сработало!

    foreach (string i in database)
        {
            // compares query (from index 0 to length of) to all strings in database

            if (i.StartsWith(query))
            {
                // add to list above based on query
                dbQueryList.Add(i);
                Console.WriteLine(i);
            }
            // if statement truncates dbQueryList to 5 results
            if (dbQueryList.Capacity >= 5)
                break;
        }
        return dbQueryList;

Очень рад, что я заставил это работать!Пожалуйста, дайте мне знать, если есть какие-либо дальнейшие отзывы о том, как улучшить и очистить этот код в случае необходимости!Всем привет!

1 Ответ

0 голосов
/ 28 декабря 2018

Проблема в том, что вы используете = вместо == в операторе if.

В C # = оператор предназначен для назначения, поэтому то, что вы делаете, пытается назначить query к выражению слева, что невозможно.Вместо этого используйте оператор ==, который предназначен для сравнения.

Также существует более подходящий метод - используйте i.StartsWith(query), чтобы проверить, начинается ли строка с данного запроса.Текущее решение будет работать до тех пор, пока i не меньше query.Length, и в этом случае оно выдаст исключение.

if (i.StartsWith(query))
{
   ...
...