For loop 具有带有值的列表。如果项目存在多次,是否增加价值?
我想从剪辑开始,尝试实现一个非常简单的任务:For loop 具有带有值的列表。如果项目存在多次,是否增加价值?,for-loop,clips,counting-sort,For Loop,Clips,Counting Sort,我想从剪辑开始,尝试实现一个非常简单的任务: Item1 = 5 Item2 = 7 Item3 = 8 Item1 = 10 假设我有上面的变量或赋值。现在我需要一个脚本来将具有最小值的项目排序为最大值。此外,具有相同名称(项目1)的项目应汇总其值 已经在其他语言中意识到了这一点,但我完全沉浸在剪辑中 NewList= {Item2=7,Item3=8,Item1=15} 嗨,我认为在这样的情况下,悬赏是不合适的。你可以删除这一行并添加一些细节。好的,我删除了这一行,但我希望这一问题是不言
Item1 = 5
Item2 = 7
Item3 = 8
Item1 = 10
假设我有上面的变量或赋值。现在我需要一个脚本来将具有最小值的项目排序为最大值。此外,具有相同名称(项目1)的项目应汇总其值
已经在其他语言中意识到了这一点,但我完全沉浸在剪辑中
NewList= {Item2=7,Item3=8,Item1=15}
嗨,我认为在这样的情况下,悬赏是不合适的。你可以删除这一行并添加一些细节。好的,我删除了这一行,但我希望这一问题是不言自明的。例如,我有一些数据,比如:Apple=3.5香蕉=5苹果=4.5期望的输出是:{Banana=5},{Apple=8}您正在搜索的是一个字典一个自定义添加函数,用于检查添加的键是否已经有值,如果已经有值,则将两者相加。如果编程语言中不存在dict,则需要创建自己的数据结构以用于类似用途。如果您的意思是,则在中未提及字典数据类型。我可以在Python或类似语言中添加示例代码,但正如您编写的那样,您已经知道如何在其他语言中执行此操作,我认为这对您没有帮助。这非常有效!非常感谢你。非常感谢您的时间。是否可以使用for循环以便方便地插入新的数据对?例如,我想将存储在某个多字段中的每个数据对发送给[d1],而不是(发送[d1]添加项3 8)?谢谢是的,如果您将键分配给一个多字段变量,并将值分配给另一个多字段变量,您可以使用类似(循环计数(?i 1(长度$?键))(println(n次$?i?键)”=“(n次$?i?值)),其中println调用将替换为将每个键/值添加到字典中的调用。
CLIPS>
(defclass ENTRY
(is-a USER)
(slot key)
(slot value))
CLIPS>
(defclass DICTIONARY
(is-a USER)
(multislot entries))
CLIPS>
(defmessage-handler DICTIONARY find-key-position (?key)
(bind ?index 1)
(foreach ?e ?self:entries
(if (eq (send ?e get-key) ?key)
then
(return ?index))
(bind ?index (+ ?index 1)))
(return FALSE))
CLIPS>
(defmessage-handler DICTIONARY add (?key ?value)
(bind ?position
(send ?self find-key-position ?key))
(if ?position
then
(bind ?entry (nth$ ?position ?self:entries))
(send ?entry put-value (+ (send ?entry get-value) ?value))
else
(bind ?position (+ (length$ ?self:entries) 1))
(bind ?entry
(make-instance of ENTRY (key ?key) (value ?value)))
(slot-direct-insert$ entries ?position ?entry)))
CLIPS>
(defmessage-handler DICTIONARY display ()
(printout t "{")
(foreach ?e ?self:entries
(printout t " " (send ?e get-key) "=" (send ?e get-value)))
(printout t " }" crlf))
CLIPS>
(deffunction sort-by-value (?e1 ?e2)
(> (send ?e1 get-value) (send ?e2 get-value)))
CLIPS>
(defmessage-handler DICTIONARY sort ()
(bind ?self:entries (sort sort-by-value ?self:entries))
TRUE)
CLIPS> (make-instance d1 of DICTIONARY)
[d1]
CLIPS> (send [d1] display)
{ }
CLIPS> (send [d1] add item1 5)
TRUE
CLIPS> (send [d1] add item2 7)
TRUE
CLIPS> (send [d1] add item3 8)
TRUE
CLIPS> (send [d1] display)
{ item1=5 item2=7 item3=8 }
CLIPS> (send [d1] add item1 10)
15
CLIPS> (send [d1] display)
{ item1=15 item2=7 item3=8 }
CLIPS> (send [d1] sort)
TRUE
CLIPS> (send [d1] display)
{ item2=7 item3=8 item1=15 }
CLIPS>