私はインタビューで以下の.NET質問を受けました。なぜ私は低得点を得たのかわかりません。残念ながら、私はフィードバックを得ていませんでした。.NETインタビュー、コード構造とデザイン
質問:
ファイルhockey.csvはホッケープレミアリーグからの結果が含まれています。 「For」と「Against」の欄には、そのシーズンの各チームの得点の合計数が表示されます(Alabamaは相手に対して79ゴールを決め、36ゴールを獲得しました)。
「for」と「against」ゴールの差が最も小さいチームの名前を印刷するプログラムを作成します。
hockey.csvの構造は、(それが有効なcsvファイルですが、私はアイデアを得るためにここに値をコピーした)チームを次のようになります
- について -
反しアラバマ州79 36
ワシントン67 30
インディアナ87 45
ニューカッスル74 52
フロリダ53 37
ニューヨーク46 47
サンダーランド29 51
LOVA 41 64
ネバダ33 63
ボストン30 64
ネバダ33 63
ボストン30 64
ソリューション:
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); }
}
}
出力:ボストン、GOALS DIF::「目標> TEAMに対するfor' and
で 最小の差が-34
誰かが私のコードを確認してくださいことができ、明らかに間違っているものはここに見てください。彼らは、コードの構造/設計およびプログラムが正しい結果(すなわち、最も低い差異)を生成するかどうかにのみ興味があった。とても有難い。たぶん
フィードバックを受け取っていない場合は、得点が低いことをどのように知っていますか?時には、他の人がポジションを良くするだけの場合もあります。 –
好奇心がそそられていません。どのくらい彼らはあなたにこの質問を完了させるようにしましたか? –
@ClaudioRediそれは私にも驚かせるものですが、彼らは私に低い印を付けて、この段階では失敗したと言っています。理由を言わなかった。 –