parent
2126888d8a
commit
6fa17a8801
@ -0,0 +1,63 @@
|
|||||||
|
class DataTable
|
||||||
|
def initialize(data)
|
||||||
|
@data = data.map { |row| row.dup.freeze }.freeze
|
||||||
|
end
|
||||||
|
|
||||||
|
def item(row, col)
|
||||||
|
return nil unless valid_row?(row) && valid_col?(col)
|
||||||
|
@data[row][col]
|
||||||
|
end
|
||||||
|
|
||||||
|
def rows_count
|
||||||
|
@data.size
|
||||||
|
end
|
||||||
|
|
||||||
|
def columns_count
|
||||||
|
return 0 if @data.empty?
|
||||||
|
@data.first.size
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def valid_row?(row)
|
||||||
|
row.between?(0, rows_count - 1)
|
||||||
|
end
|
||||||
|
|
||||||
|
def valid_col?(col)
|
||||||
|
col.between?(0, columns_count - 1)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
class DataList
|
||||||
|
def initialize(items)
|
||||||
|
@items = items.dup.freeze
|
||||||
|
@selected = []
|
||||||
|
end
|
||||||
|
|
||||||
|
def select(number)
|
||||||
|
index = number.to_i
|
||||||
|
toggle_selection(index) if valid_index?(index)
|
||||||
|
end
|
||||||
|
|
||||||
|
def get_selected
|
||||||
|
@selected.dup
|
||||||
|
end
|
||||||
|
|
||||||
|
def get_names
|
||||||
|
raise NotImplementedError, "Implement this method in a subclass"
|
||||||
|
end
|
||||||
|
|
||||||
|
def get_data
|
||||||
|
raise NotImplementedError, "Implement this method in a subclass"
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def valid_index?(index)
|
||||||
|
index.between?(0, @items.size - 1)
|
||||||
|
end
|
||||||
|
|
||||||
|
def toggle_selection(index)
|
||||||
|
@selected.include?(index) ? @selected.delete(index) : @selected << index
|
||||||
|
end
|
||||||
|
end
|
@ -0,0 +1,39 @@
|
|||||||
|
require_relative 'data_table'
|
||||||
|
|
||||||
|
data = [
|
||||||
|
[1, "Alice", 25],
|
||||||
|
[2, "Bob", 30],
|
||||||
|
[3, "Charlie", 35]
|
||||||
|
]
|
||||||
|
|
||||||
|
data_table = DataTable.new(data)
|
||||||
|
|
||||||
|
puts "Количество строк: #{data_table.rows_count}" # Ожидаем 3
|
||||||
|
puts "Количество столбцов: #{data_table.columns_count}" # Ожидаем 3
|
||||||
|
puts "Элемент в строке 1, столбце 2: #{data_table.item(1, 2)}" # Ожидаем 30
|
||||||
|
puts "Элемент в строке 0, столбце 1: #{data_table.item(0, 1)}" # Ожидаем "Alice"
|
||||||
|
puts "Элемент за пределами таблицы: #{data_table.item(10, 10)}" # Ожидаем nil
|
||||||
|
|
||||||
|
items = [
|
||||||
|
{ id: 1, name: "Alice", age: 25 },
|
||||||
|
{ id: 2, name: "Bob", age: 30 },
|
||||||
|
{ id: 3, name: "Charlie", age: 35 }
|
||||||
|
]
|
||||||
|
|
||||||
|
data_list = DataList.new(items)
|
||||||
|
|
||||||
|
data_list.select(0)
|
||||||
|
data_list.select(2)
|
||||||
|
puts "Выбранные элементы: #{data_list.get_selected.inspect}"
|
||||||
|
|
||||||
|
begin
|
||||||
|
data_list.get_names
|
||||||
|
rescue NotImplementedError => e
|
||||||
|
puts "Ошибка: #{e.message}" # Ожидаем "Implement this method in a subclass"
|
||||||
|
end
|
||||||
|
|
||||||
|
begin
|
||||||
|
data_list.get_data
|
||||||
|
rescue NotImplementedError => e
|
||||||
|
puts "Ошибка: #{e.message}" # Ожидаем "Implement this method in a subclass"
|
||||||
|
end
|
Loading…
Reference in new issue