Tôi đã nhận được câu hỏi .NET dưới đây trong một cuộc phỏng vấn. Tôi không biết tại sao tôi có điểm thấp. Rất tiếc, tôi không nhận được phản hồi.Cuộc phỏng vấn .NET, cấu trúc mã và thiết kế
Câu hỏi:
Các hockey.csv tập tin chứa các kết quả từ Hockey Premier League. Các cột ‘For’ và ‘Against’ chứa tổng số bàn thắng ghi được và chống lại từng đội trong mùa giải đó (vì vậy Alabama ghi được 79 bàn thắng vào lưới đối thủ, và có 36 bàn thắng ghi bàn với họ).
Viết chương trình để in tên nhóm với sự khác biệt nhỏ nhất trong mục tiêu ‘for’ và ‘against’.
cấu trúc của hockey.csv trông như thế này (nó là một tập tin csv hợp lệ, nhưng tôi chỉ cần sao chép các giá trị ở đây để có được một ý tưởng)
Team - Ví - Against
Alabama 79 36
Washinton 67 30
Indiana 87 45
Newcastle 74 52
Florida 53 37
New York 46 47
Sunderland 29 51
Lova 41 64
Nevada 33 63
Boston 30 64
Nevada 33 63
Boston 30 64
Giải pháp:
class Program
{
static void Main(string[] args)
{
string path = @"C:\Users\<valid csv path>";
var resultEvaluator = new ResultEvaluator(string.Format(@"{0}\{1}",path, "hockey.csv"));
var team = resultEvaluator.GetTeamSmallestDifferenceForAgainst();
Console.WriteLine(
string.Format("Smallest difference in ‘For’ and ‘Against’ goals > TEAM: {0}, GOALS DIF: {1}",
team.Name, team.Difference));
Console.ReadLine();
}
}
public interface IResultEvaluator
{
Team GetTeamSmallestDifferenceForAgainst();
}
public class ResultEvaluator : IResultEvaluator
{
private static DataTable leagueDataTable;
private readonly string filePath;
private readonly ICsvExtractor csvExtractor;
public ResultEvaluator(string filePath){
this.filePath = filePath;
csvExtractor = new CsvExtractor();
}
private DataTable LeagueDataTable{
get
{
if (leagueDataTable == null)
{
leagueDataTable = csvExtractor.GetDataTable(filePath);
}
return leagueDataTable;
}
}
public Team GetTeamSmallestDifferenceForAgainst() {
var teams = GetTeams();
var lowestTeam = teams.OrderBy(p => p.Difference).First();
return lowestTeam;
}
private IEnumerable<Team> GetTeams() {
IList<Team> list = new List<Team>();
foreach (DataRow row in LeagueDataTable.Rows)
{
var name = row["Team"].ToString();
var @for = int.Parse(row["For"].ToString());
var against = int.Parse(row["Against"].ToString());
var team = new Team(name, against, @for);
list.Add(team);
}
return list;
}
}
public interface ICsvExtractor
{
DataTable GetDataTable(string csvFilePath);
}
public class CsvExtractor : ICsvExtractor
{
public DataTable GetDataTable(string csvFilePath)
{
var lines = File.ReadAllLines(csvFilePath);
string[] fields;
fields = lines[0].Split(new[] { ',' });
int columns = fields.GetLength(0);
var dt = new DataTable();
//always assume 1st row is the column name.
for (int i = 0; i < columns; i++)
{
dt.Columns.Add(fields[i].ToLower(), typeof(string));
}
DataRow row;
for (int i = 1; i < lines.GetLength(0); i++)
{
fields = lines[i].Split(new char[] { ',' });
row = dt.NewRow();
for (int f = 0; f < columns; f++)
row[f] = fields[f];
dt.Rows.Add(row);
}
return dt;
}
}
public class Team
{
public Team(string name, int against, int @for)
{
Name = name;
Against = against;
For = @for;
}
public string Name { get; private set; }
public int Against { get; private set; }
public int For { get; private set; }
public int Difference
{
get { return (For - Against); }
}
}
Output: sự khác biệt nhỏ trong for' and
chống lại' bàn thắng> TEAM: Boston, MỤC TIÊU DIF: -34
Ai đó có thể xin vui lòng xem xét mã của tôi và thấy bất cứ điều gì rõ ràng là sai ở đây? Họ chỉ quan tâm đến cấu trúc/thiết kế của mã và liệu chương trình có tạo ra kết quả chính xác hay không (tức là sự khác biệt thấp nhất). Nhiều đánh giá cao.
Làm cách nào để bạn biết rằng bạn có điểm thấp nếu bạn không nhận được bất kỳ phản hồi nào? Đôi khi một số người khác chỉ phù hợp hơn cho vị trí, đó là tất cả. –
Hết sức tò mò. Họ đã cho bạn bao lâu để hoàn thành câu hỏi này? –
@ClaudioRedi đó là những gì làm tôi ngạc nhiên là tốt, họ chỉ cho tôi đánh dấu thấp và nói không thành công ở giai đoạn này. Không nói tại sao. –