ฉันต้องการใช้หรือmin(5,10)
Math.max(4,7)
มีฟังก์ชั่นสำหรับเอฟเฟกต์นี้ใน Ruby หรือไม่?
ฉันต้องการใช้หรือmin(5,10)
Math.max(4,7)
มีฟังก์ชั่นสำหรับเอฟเฟกต์นี้ใน Ruby หรือไม่?
คำตอบ:
คุณทำได้
[5, 10].min
หรือ
[4, 7].max
พวกเขามาจากโมดูล Enumerableดังนั้นสิ่งใดก็ตามที่รวมถึงEnumerable
จะมีวิธีการเหล่านั้น
v2.4 แนะนำตัวเองArray#min
และArray#max
ซึ่งเป็นวิธีที่เร็วกว่าวิธีการ Enumerable #each
เพราะพวกเขาข้ามเรียก
@nicholasklick กล่าวถึงตัวเลือกอื่นแต่เวลานี้กลับอาร์เรย์ของEnumerable#minmax
[min, max]
[4, 5, 7, 10].minmax
=> [4, 10]
std::max(4, 7)
มี "เครื่องหมายวรรคตอน" มากกว่า[4, 7].max
?
std::max
สามารถนำเข้าสู่เนมสเปซของคุณmax(4, 7)
ได้ รอ; เมื่อมองไปด้านบนฉันเห็นว่าฉันพูดไปแล้ว
คุณสามารถใช้ได้
[5,10].min
หรือ
[4,7].max
มันเป็นวิธีการสำหรับอาร์เรย์
ผลลัพธ์ทั้งหมดเหล่านั้นสร้างขยะในความพยายามอย่างกระตือรือร้นเพื่อจัดการมากกว่าสองข้อโต้แย้ง ฉันอยากรู้ว่าพวกเขาปฏิบัติอย่างไรเมื่อเปรียบเทียบกับ ol ดี:
def max (a,b)
a>b ? a : b
end
ซึ่งก็คือคำตอบอย่างเป็นทางการของฉันสำหรับคำถามของคุณ
[a,b].max
แต่ก็ยังไม่ชัดเจนว่าจะเร็วกว่าการใช้งานด้านบนหรือไม่ blog.bigbinary.com 2016/11/17/…
หากคุณต้องการค้นหาแฮ็กสูงสุด / นาทีคุณสามารถใช้#max_by
หรือ#min_by
people = {'joe' => 21, 'bill' => 35, 'sally' => 24}
people.min_by { |name, age| age } #=> ["joe", 21]
people.max_by { |name, age| age } #=> ["bill", 35]
นอกเหนือจากคำตอบที่ให้แล้วหากคุณต้องการแปลงEnumerable # maxเป็นวิธีการสูงสุดที่สามารถเรียกหมายเลขตัวแปรหรืออาร์กิวเมนต์เช่นในภาษาการเขียนโปรแกรมอื่นคุณสามารถเขียน:
def max(*values)
values.max
end
เอาท์พุท:
max(7, 1234, 9, -78, 156)
=> 1234
สิ่งนี้ใช้ในทางที่ผิดของผู้ประกอบการ splat เพื่อสร้างวัตถุอาร์เรย์ที่มีข้อโต้แย้งทั้งหมดที่มีให้หรือวัตถุอาร์เรย์ที่ว่างเปล่าถ้าไม่มีข้อโต้แย้งที่ได้รับ ในกรณีหลังนี้วิธีการที่จะกลับมาnil
ตั้งแต่เรียกEnumerable # สูงสุดnil
บนอาร์เรย์ว่างผลตอบแทนวัตถุ
หากคุณต้องการกำหนดวิธีการนี้ในโมดูลคณิตศาสตร์สิ่งนี้ควรทำเคล็ดลับ:
module Math
def self.max(*values)
values.max
end
end
โปรดทราบว่า Enumerable.max เป็นอย่างน้อยสองครั้งช้าเมื่อเทียบกับผู้ประกอบการที่ประกอบไปด้วย (?:
) ดูคำตอบของ Dave Morseสำหรับวิธีที่ง่ายและรวดเร็วยิ่งขึ้น
def find_largest_num(nums)
nums.sort[-1]
end